package 传智播客_黑马.java基础.LearnException;
/*
处理异常的五个关键字 try...catch...finally...throw...throws
1,抛出异常throw
    可以使用throw关键字,在指定的方法中抛出指定的异常
    使用格式:
        throw new xxxException("异常产生的原因")
    注意:
        1,throw关键字,必须写在方法的内部
        2,throw关键字后边的new对象必须是Exception或者Exception的子类对象
        3,throw关键字抛出指定的异常对象,我们就必须处理这个异常对象
            throw关键字后边创建的是RuntimeException或者是RuntimeException的子类对象,我们可以不处理,交给JVM
            throw关键字后面创建的是编译异常,我们就必须处理这个异常,要么throw要么try,catch
 */
public class LearnThrow {
    public static void main(String[] args) {
        int[] arr = {1,2,3};
        int j = getElement(arr, -1);
        System.out.println(j);
    }
    /*
    定义一个方法.获取数组指定索引处的元素
    参数:
      int[] arr
      int index
      以后在工作中我们首先自诩对方法传递过来的参数进行合法性校验
      如果参数不合法,我们就必须通过抛出异常的方式,告知方法的调用者,传递的参数有问题
    */
    public static int getElement(int[] arr,int index){
        /*
        我们可以对传递过来的数组,进行合法性校验
        如果数组arr的值是null
        那么我们就可以抛出指针异常,告知方法的调用者("传递的数组的值是null")
         */
        if(arr == null){
            throw new NullPointerException("传递的数组是空");
        }
        /*
        我们可以对传递过来的参数index进行合法性校验
        如果index的范围不在范围内
        那么我们抛出索引越界异常
         */
        if(index<0 || index>=arr.length){
            throw new ArrayIndexOutOfBoundsException("数组越界异常");
        }
        int j = arr[index];
        return j;
    }

}
